﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using SOM.Model;

namespace SOM.AbstractDAL
{
    public abstract class AbstractReclamacaoDAL
    {
        public abstract List<Reclamacao> ReturnAll();
        public abstract Reclamacao FindById(int idReclamcao);
        public abstract Reclamacao Load(int idReclamacao, SOMEntities contexto);
        public abstract List<Reclamacao> GetTopReclamacoes(int quantidade);
        public abstract void Insert(Reclamacao reclamacao);
        public abstract void Insert(Reclamacao reclamacao, SOMEntities contexto);
        public abstract void Update(Reclamacao reclamacao);
        public abstract void Update(Reclamacao reclamacao, SOMEntities contexto);
        public abstract void Delete(Reclamacao reclamacao);
        public abstract void Delete(Reclamacao reclamacao, SOMEntities contexto);
        public abstract List<Reclamacao> FindByPredicate(Expression<Func<Reclamacao, bool>> predicate);
        public abstract List<Reclamacao> FindByNickname(string nickname);
        public abstract List<Reclamacao> FindByPalavraChave(string palavraChave);
        public abstract List<Reclamacao> FindByPalavraChave(string palavraChave, string nickname);
        public abstract List<Reclamacao> FindByUsuarioDescricao(string descricao, string nickName);
        public abstract List<Reclamacao> FindByInstituicao(string cnpj);
        public abstract List<Reclamacao> FindByDescricao(string descricaoReclamacao);
        public abstract List<Reclamacao> FindByData(DateTime dataInicial, DateTime dataFinal);
        public abstract List<Reclamacao> FindByDataDescricao(DateTime dataInicial, DateTime dataFinal, string descricao);
        public abstract void SaveChanges();
    }
}
